package com.demo.java.OD151_200.OD200;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最大 N 个数与最小 N 个数的和】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145890311
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 获取输入的数字数量和数字列表
        int count = Integer.parseInt(sc.nextLine());  // 读取数字数量
        String[] input = sc.nextLine().split(" ");    // 读取数字列表
        int max = Integer.parseInt(sc.nextLine());    // 需要选择的最大和最小数字的个数

        // 使用集合存储，自动去重
        Set<Integer> set = new HashSet<>();
        for (String s : input) {
            set.add(Integer.parseInt(s));  // 将数字加入集合，自动去重
        }

        // 如果去重后的元素数量小于 2 * N，则返回 -1
        if (set.size() < 2 * max) {
            System.out.println(-1);
            return;
        }

        // 将集合转为列表，并排序
        List<Integer> list = new ArrayList<>(set);
        Collections.sort(list);

        // 计算最大和最小数字的和
        int total = 0;
        for (int i = 0; i < max; i++) {
            total += list.get(i) + list.get(list.size() - 1 - i);  // 最小数字和最大数字配对
        }

        // 输出结果
        System.out.println(total);
    }
}